ORDER BY
The order by command is used to sort records in ascending and descending order. When ordering, asc specifies ascending order (which is the default), and desc specifies descending order.
asc
Example:
select * from employees order by last_name asc;
This query orders employees by last_name in ascending alphabetical order.
Result:

desc
Example:
select * from employees order by last_name desc;
This query orders employees by last_name in descending alphabetical order.
Result:

Ecto query for order by
order_by/3
Expression
In Ecto, the order_by/3 function is used to alphabetically order records.
Example:
asc
HR.Employee
|> order_by(asc: :last_name)
|> HR.Repo.all()
Result:
IEx(18)> HR.Employee |> order_by(asc: :last_name) |> HR.Repo.all()
[
%HR.Employee{
__meta__: #Ecto.Schema.Metadata<:loaded, "employees">,
employee_id: 105,
first_name: "David",
last_name: "Austin",
email: "david.austin@sqltutorial.org",
phone_number: "590.423.4569",
hire_date: ~D[1997-06-25],
salary: Decimal.new("4800.00"),
manager_id: 103,
job_id: 9,
department_id: 6
},
%HR.Employee{
__meta__: #Ecto.Schema.Metadata<:loaded, "employees">,
employee_id: 204,
first_name: "Hermann",
last_name: "Baer",
email: "hermann.baer@sqltutorial.org",
phone_number: "515.123.8888",
hire_date: ~D[1994-06-07],
salary: Decimal.new("10000.00"),
manager_id: 101,
job_id: 12,
department_id: 7
},
%HR.Employee{
__meta__: #Ecto.Schema.Metadata<:loaded, "employees">,
employee_id: 116,
first_name: "Shelli",
last_name: "Baida",
email: "shelli.baida@sqltutorial.org",
phone_number: "515.127.4563",
hire_date: ~D[1997-12-24],
salary: Decimal.new("2900.00"),
manager_id: 114,
job_id: 13,
department_id: 3
},
%HR.Employee{
__meta__: #Ecto.Schema.Metadata<:loaded, "employees">,
employee_id: 192,
first_name: "Sarah",
last_name: "Bell",
email: "sarah.bell@sqltutorial.org",
phone_number: "650.501.1876",
hire_date: ~D[1996-02-04],
salary: Decimal.new("4000.00"),
manager_id: 123,
job_id: 17,
department_id: 5
},
%HR.Employee{
__meta__: #Ecto.Schema.Metadata<:loaded, "employees">,
employee_id: 110,
first_name: "John",
last_name: "Chen",
email: "john.chen@sqltutorial.org",
phone_number: "515.124.4269",
hire_date: ~D[1997-09-28],
salary: Decimal.new("8200.00"),
manager_id: 108,
job_id: 6,
department_id: 10
},
%HR.Employee{
__meta__: #Ecto.Schema.Metadata<:loaded, "employees">,
employee_id: 119,
first_name: "Karen",
last_name: "Colmenares",
email: "karen.colmenares@sqltutorial.org",
phone_number: "515.127.4566",
hire_date: ~D[1999-08-10],
salary: Decimal.new("2500.00"),
manager_id: 114,
job_id: 13,
department_id: 3
},
%HR.Employee{
__meta__: #Ecto.Schema.Metadata<:loaded, "employees">,
employee_id: 102,
first_name: "Lex",
last_name: "De Haan",
email: "lex.de haan@sqltutorial.org",
phone_number: "515.123.4569",
hire_date: ~D[1993-01-13],
salary: Decimal.new("17000.00"),
manager_id: 100,
job_id: 5,
department_id: 9
}
<!-- and so on -->
]
you can see that last_name is starts from Austin.
desc
HR.Employee
|> order_by(desc: :last_name)
|> HR.Repo.all()
Result:
IEx(20)> HR.Employee |> order_by(desc: :last_name) |> HR.Repo.all()
[
%HR.Employee{
__meta__: #Ecto.Schema.Metadata<:loaded, "employees">,
employee_id: 200,
first_name: "Jennifer",
last_name: "Whalen",
email: "jennifer.whalen@sqltutorial.org",
phone_number: "515.123.4444",
hire_date: ~D[1987-09-17],
salary: Decimal.new("4400.00"),
manager_id: 101,
job_id: 3,
department_id: 1
},
%HR.Employee{
__meta__: #Ecto.Schema.Metadata<:loaded, "employees">,
employee_id: 120,
first_name: "Matthew",
last_name: "Weiss",
email: "matthew.weiss@sqltutorial.org",
phone_number: "650.123.1234",
hire_date: ~D[1996-07-18],
salary: Decimal.new("8000.00"),
manager_id: 100,
job_id: 19,
department_id: 5
},
%HR.Employee{
__meta__: #Ecto.Schema.Metadata<:loaded, "employees">,
employee_id: 123,
first_name: "Shanta",
last_name: "Vollman",
email: "shanta.vollman@sqltutorial.org",
phone_number: "650.123.4234",
hire_date: ~D[1997-10-10],
salary: Decimal.new("6500.00"),
manager_id: 100,
job_id: 19,
department_id: 5
},
%HR.Employee{
__meta__: #Ecto.Schema.Metadata<:loaded, "employees">,
employee_id: 112,
first_name: "Jose Manuel",
last_name: "Urman",
email: "jose manuel.urman@sqltutorial.org",
phone_number: "515.124.4469",
hire_date: ~D[1998-03-07],
salary: Decimal.new("7800.00"),
manager_id: 108,
job_id: 6,
department_id: 10
},
%HR.Employee{
__meta__: #Ecto.Schema.Metadata<:loaded, "employees">,
employee_id: 117,
first_name: "Sigal",
last_name: "Tobias",
email: "sigal.tobias@sqltutorial.org",
phone_number: "515.127.4564",
hire_date: ~D[1997-07-24],
salary: Decimal.new("2800.00"),
manager_id: 114,
job_id: 13,
department_id: 3
}
<!-- and so on -->
]
You can see that last_name starts from Whalen.
Keywords
asc
HR.Repo.all(from c in HR.Employee, order_by: [asc: :last_name])
desc
HR.Repo.all(from c in HR.Employee, order_by: [desc: :last_name])
In both examples, c is the reference variable representing HR.Employee. For more on reference variables, see Aliases in Ecto.